//new的实现原理
//思路：
//1.创建一个空对象，构造函数中的this指向这个空对象
//2.这个新对象被执行 [[原型]] 连接
//3.执行构造函数方法，属性和方法被添加到this引用的对象中
//4.如果构造函数中没有返回其它对象，那么返回this，即创建的这个的新对象，否则，返回构造函数中返回的对象。
function resolveNew(fn,...args){
    let target = {};//创建一个新对象
    //执行[[原型]]连接;target是constructor的实例
    target.__proto__ = fn.prototype;
    //执行构造函数，将属性或者方法添加到创建的空对象上
    let result = fn.apply(target,args);
    if(result && (typeof (result) === 'object' || typeof (result) == 'function')){
        return result;
    }
    return target;
}
function Student(name,age) {
    this.name = name
    this.age = age
}
let stu = resolveNew(Student, 'Jack',16);
console.log(stu);
